﻿using OnlineFIR.Utilities;

namespace OnlineFIR.Models
{
    public class Map
    {
        //第一维度是x(行)，第二维度是y(列)
        private byte[][] map;
        //0:Empty 1:A 2:B 3:Awin 4:Bwin
        public int ysize;
        public int xsize;
        public Map(int xsize,int ysize)
        {
            this.ysize = ysize;//列数
            this.xsize = xsize;//行数
            map = new byte[xsize][];
            for(int i = 0; i < xsize; i++)
            {
                map[i] = new byte[ysize];
            }
        }
        public byte[][] Get()
        {
            return map;
        }
        public byte GetOne(int x,int y)
        {
            return map[x][y];
        }
        public byte GetOne(Point p)
        {
            return map[p.x][p.y];
        }
        public void Set(int x,int y,byte state)
        {
            map[x][y] = state;
        }
        public void Set(Point p,byte state)
        {
            map[p.x][p.y] = state;
        }
        public bool IsInside(int x, int y)
        {
            //x表示行号，y表示列号
            if (x >= 0 && x < xsize)
            {
                if (y >= 0 && y < ysize)
                {
                    return true;
                }
            }
            return false;
        }
        public bool IsInside(Point p)
        {
            //x表示行号，y表示列号
            if (p.x >= 0 && p.x < xsize)
            {
                if (p.y >= 0 && p.y < ysize)
                {
                    return true;
                }
            }
            return false;
        }
        public bool IsValid(Point pt)
        {
            return IsValid(pt.x, pt.y);
        }
        public bool IsValid(int x, int y)
        {
            //x表示行号，y表示列号
            if (x >= 0 && x < xsize)
            {
                if (y >= 0 && y < ysize)
                {
                    if (map[x][y] != 1 && map[x][y] != 2)
                    {
                        return true;
                    }
                }
            }
            return false;
        }
        public void ClearHighlight()
        {
            for(int i = 0; i < xsize; i++)
            {
                for(int j = 0; j < ysize; j++)
                {
                    if(map[i][j]==3 || map[i][j] == 4)
                    {
                        this.Set(i, j, 0);
                    }
                }
            }
        }
        public Map Copy()
        {
            Map mymap = new Map(xsize, ysize);
            for (int i = 0; i < mymap.xsize; i++)
            {
                for (int j = 0; j < mymap.ysize; j++)
                {
                    mymap.Set(i, j, GetOne(i, j));
                }
            }
            return mymap;
        }
    }
}
